package it.polimi.traveldream.web.beans;

import it.polimi.traveldream.ejb.ContentManager;
import it.polimi.traveldream.ejb.dtos.*;

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.ViewScoped;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * Created by cHoco on 23/01/14.
 */

@ManagedBean(name = "advancedUserServiziWebBean")
@ViewScoped
public class AdvancedUserServiziWebBean {

    @EJB
    private ContentManager contentManager;

    private String codiceServizioInModifica;


    private TrasportoDTO newTrasporto;

    private HotelDTO newHotel;

    private EscursioneDTO newEscursione;


    private String tipoServizio;


    public AdvancedUserServiziWebBean() {
        newTrasporto = new TrasportoDTO();
        newHotel = new HotelDTO();
        newEscursione = new EscursioneDTO();
    }

    //Generated by Map
    private static Map<String,Object> tipiTrasporto;
    static{
        tipiTrasporto = new LinkedHashMap<String,Object>();
        tipiTrasporto.put("Aereo", TipoTrasporto.AEREO);
        tipiTrasporto.put("Treno", TipoTrasporto.TRENO);
        tipiTrasporto.put("Bus", TipoTrasporto.BUS);
    }

    public Map<String,Object> getTipiTrasporto() {
        return tipiTrasporto;
    }

    public String getCodiceServizioInModifica() {
        return codiceServizioInModifica;
    }

    public void setCodiceServizioInModifica(String codiceServizioInModifica) {
        this.codiceServizioInModifica = codiceServizioInModifica;
    }

    public String getTipoServizio() {
        return tipoServizio;
    }

    public void setTipoServizio(String tipoServizio) {
        this.tipoServizio = tipoServizio;
    }

    public TrasportoDTO getNewTrasporto() {
        return newTrasporto;
    }

    public void setNewTrasporto(TrasportoDTO trasporto) {
        this.newTrasporto = trasporto;
    }

    public EscursioneDTO getNewEscursione() {
        return newEscursione;
    }

    public void setNewEscursione(EscursioneDTO escursione) {
        this.newEscursione = escursione;
    }

    public HotelDTO getNewHotel() {
        return newHotel;
    }

    public void setNewHotel(HotelDTO hotel) {
        this.newHotel = hotel;
    }

    public String aggiungiTrasporto() {
        contentManager.aggiungiTrasporto(newTrasporto);
        return "aggiungiServizioSuccess?faces-redirect=true&amp;tipoServizio=trasporto";
    }

    public String aggiungiHotel() {
        contentManager.aggiungiHotel(newHotel);
        return "aggiungiServizioSuccess?faces-redirect=true&amp;tipoServizio=hotel";
    }

    public String aggiungiEscursione() {
        contentManager.aggiungiEscursione(newEscursione);
        return "aggiungiServizioSuccess?faces-redirect=true&amp;tipoServizio=escursione";
    }


    public String modificaTrasporto() {
        contentManager.modificaTrasporto(codiceServizioInModifica, newTrasporto);
        return "modificaServizioSuccess?faces-redirect=true&amp;tipoServizio=trasporto";
    }

    public String modificaHotel() {
        contentManager.modificaHotel(codiceServizioInModifica, newHotel);
        return "modificaServizioSuccess?faces-redirect=true&amp;tipoServizio=hotel";
    }

    public String modificaEscursione() {
        contentManager.modificaEscursione(codiceServizioInModifica, newEscursione);
        return "modificaServizioSuccess?faces-redirect=true&amp;tipoServizio=escursione";
    }

    public String modificaServizio() {
        switch (tipoServizio) {
            case "trasporto": {
                newTrasporto = contentManager.getTrasporto(codiceServizioInModifica);
                break;
            }

            case "hotel": {
                newHotel = contentManager.getHotel(codiceServizioInModifica);
                break;
            }

            case "escursione": {
                newEscursione = contentManager.getEscursione(codiceServizioInModifica);
                break;
            }

        }
        return "modificaServizio";
    }
}
